package my.study.designpattern.decorator.example1;

/**
 * 装饰者一
 * 
 * @author mouca.he
 * 
 */
public class DecoratorOne extends AbstractDecorator {

	public DecoratorOne(InterfaceComponent component) {
		super(component);
	}

	/**
	 * 根据需要重载模板类preSay()方法
	 */
	protected void preSay() {
		System.out.println("DecoratorOne.preSay():装饰者一的preSay()方法");
	}

	/**
	 * 根据需要重载模板类afterSay()方法
	 */
	protected void afterSay() {
		System.out.println("DecoratorOne.afterSay():装饰者一的afterSay()方法");
	}

	/**
	 * 测试方法
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		InterfaceComponent interfaceComponent = new DecoratorTwo(
				new DecoratorOne(new Component()));
		interfaceComponent.say();
		/*
		 * 控制台输出： DecoratorTwo.preSay():装饰者二的preSay()方法！
		 * DecoratorOne.preSay():装饰者一的preSay()方法！ Component.say():原组件的方法！
		 * DecoratorOne.afterSay():装饰者一的afterSay()方法！
		 * DecoratorTwo.afterSay():装饰者二的afterSay()方法！
		 */
	}
}
